package com.yangfan.thread.thread_wangwenjun02;

/**
 * @description: 线程 API 守护线程
 * @author: yangfan
 * @date: Created in 2020/1/23 0023 15:58
 * @modified By:
 */
public class ThreadDaemonAPI {

    private static int counter;//计时器

    /**
     * 守护线程通常跟随主线程一起运行，如果主线程执行结束，则守护线程也会结束
     *
     * 典型的例子则是心跳检测机制。 主线程进行通信 ， 建立连接等 。。 就需要守护线程 定时执行 心跳操作
     */


    public static void main(String[] args) {

        Thread mainThread = new Thread(() -> {
            //主线程执行业务逻辑
            try {
                //出现成内开辟一个守护线程
                Thread daemonThread = new Thread(() -> {
                    while (true){
                        try {
                            Thread.sleep(3000);
                            heartbeatDetection();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                });
                daemonThread.setDaemon(true);
                daemonThread.start();

                System.out.println("主线程开始执行业务逻辑。。。。。");
                Thread.sleep(50_000);//执行的业务逻辑
                System.out.println("主线程即将执行完毕。。。。。。。");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        mainThread.start();
    }

    /**
     * 守护线程心跳检测功能
     */
    protected static void heartbeatDetection(){
        System.out.println("子线程检测心跳"+ ++counter);
    }
}
